import Toast from '@vant/weapp/toast/toast';

Page({
	data: {
		description: "", // 作品名称/描述
		imageList: [], // 图片文件列表
		videoList: [], // 视频文件列表
		device: "", // 使用设备
		location: "", // 拍摄地点
		tags: [], // 主题标签列表
		selectedTags: [] // 已选中的标签 ID 列表
	},

	onLoad() {
		// 页面加载时获取标签列表
		this.getTags();
	},

	// 获取标签列表
	getTags() {
		wx.request({
			url: 'http://localhost:8080/user/common/getTags', // 后端接口地址
			header: {
				token: wx.getStorageSync("userInfo").data.token, // 携带 token
			},
			success: (res) => {
				if (res.data.code === 1) {
					const tags = res.data.data.map(tag => ({
						...tag,
						selected: false // 初始化选中状态
					}));
					this.setData({
						tags
					});
				} else {
					Toast.fail({
						message: res.data.msg || '获取标签失败',
						context: this, // 确保上下文正确
					});
				}
			},
			fail: (err) => {
				console.error("获取标签错误", err);
				Toast.fail({
					message: '获取标签失败',
					context: this, // 确保上下文正确
				});
			}
		});
	},

	// 作品名称/描述输入
	onDescriptionChange(event) {
		this.setData({
			description: event.detail.value
		});
	},

	// 使用设备输入
	onDeviceChange(event) {
		this.setData({
			device: event.detail
		});
	},

	// 拍摄地点输入
	onLocationChange(event) {
		this.setData({
			location: event.detail
		});
	},

	// 通用的文件上传方法
	uploadFile(filePath, type) {
		const that = this;
		wx.showLoading({
			title: '上传中...',
			mask: true
		});

		wx.uploadFile({
			url: 'http://localhost:8080/user/common/upload', // 替换为你的后端接口地址
			header: {
				token: wx.getStorageSync("userInfo").data.token, // 携带 token
			},
			filePath: filePath, // 使用传递的文件路径
			name: 'file', // 后端接口接收文件的参数名
			success(res) {
				wx.hideLoading();
				console.log(res);

				if (res.statusCode === 200) {
					const data = JSON.parse(res.data);
					console.log(data.code);

					if (data.code === 1) { // 假设 code 为 1 表示成功
						const serverFilePath = data.data; // 获取返回的文件地址
						console.log('服务器返回的文件地址:', serverFilePath);

						// 根据类型更新文件地址
						if (type === 'image') {
							const imageList = that.data.imageList;
							imageList.push({
								url: serverFilePath
							});
							that.setData({
								imageList
							});
						} else if (type === 'video') {
							const videoList = that.data.videoList;
							videoList.push({
								url: serverFilePath
							});
							that.setData({
								videoList
							});
						}

						Toast.success({
							message: '上传成功',
							context: that, // 确保上下文正确
						});
					} else {
						Toast.fail({
							message: data.msg || '上传失败',
							context: that, // 确保上下文正确
						});
					}
				} else {
					Toast.fail({
						message: '上传失败',
						context: that, // 确保上下文正确
					});
				}
			},
			fail(err) {
				wx.hideLoading();
				Toast.fail({
					message: '上传失败',
					context: that, // 确保上下文正确
				});
				console.error('上传失败:', err);
			},
		});
	},

	// 图片上传后的回调
	onImageRead(event) {
		console.log("event.detail:", event.detail); // 打印 event.detail 的结构
		const {
			file
		} = event.detail;
		if (file && file.tempFilePath) {
			console.log("图片地址是:", file.tempFilePath); // 使用 tempFilePath 获取图片地址
			this.uploadFile(file.tempFilePath, 'image'); // 调用通用的上传方法
		} else {
			console.error("文件路径未找到");
		}
	},

	// 视频上传后的回调
	onVideoRead(event) {
		console.log("event.detail:", event.detail); // 打印 event.detail 的结构
		const {
			file
		} = event.detail;
		if (file && file.tempFilePath) {
			console.log("视频地址是:", file.tempFilePath); // 使用 tempFilePath 获取视频地址
			this.uploadFile(file.tempFilePath, 'video'); // 调用通用的上传方法
		} else {
			console.error("文件路径未找到");
		}
	},

	// 图片删除后的回调
	onImageDelete(event) {
		const {
			index
		} = event.detail; // 获取要删除的图片索引
		const imageList = this.data.imageList; // 获取当前图片列表
		imageList.splice(index, 1); // 删除指定索引的图片
		this.setData({
			imageList
		}); // 更新页面数据
		console.log("删除图片后的列表:", imageList); // 打印删除后的图片列表
	},

	// 视频删除后的回调
	onVideoDelete(event) {
		const {
			index
		} = event.detail; // 获取要删除的视频索引
		const videoList = this.data.videoList; // 获取当前视频列表
		videoList.splice(index, 1); // 删除指定索引的视频
		this.setData({
			videoList
		}); // 更新页面数据
		console.log("删除视频后的列表:", videoList); // 打印删除后的视频列表
	},

	toggleTag(event) {
    const index = event.currentTarget.dataset.index;
    const id = Number(event.currentTarget.dataset.id); // 确保 id 是数字类型
    const tags = this.data.tags;
    let selectedTags = this.data.selectedTags;

    // 切换选中状态
    tags[index].selected = !tags[index].selected;

    // 更新选中的标签
    if (tags[index].selected) {
        selectedTags.push(id); // 将标签 ID 加入数组
    } else {
        selectedTags = selectedTags.filter(item => item !== id); // 移除标签 ID
    }

    // 更新数据
    this.setData({
        tags,
        selectedTags
    });
}
,

	// 发布作品
onPublish() {
	const { description, imageList, videoList, device, location, selectedTags, tags } = this.data;

	if (!description) {
			Toast.fail({
					message: "请输入作品名称/描述",
					context: this,
			});
			return;
	}

	if (imageList.length === 0 && videoList.length === 0) {
			Toast.fail({
					message: "请上传照片或视频",
					context: this,
			});
			return;
	}

	if (selectedTags.length === 0) {
			Toast.fail({
					message: "请选择主题标签",
					context: this,
			});
			return;
	}

	// 获取图片和视频的 URL
	const imageUrls = imageList.map(item => item.url);
	const videoUrls = videoList.map(item => item.url);

	// 将选中的标签 ID 转换为 Tag 对象
	const tagObjects = tags
			.filter(tag => selectedTags.includes(tag.id)) // 过滤出选中的标签
			.map(tag => ({ id: tag.id, name: tag.name })); // 转换为 Tag 对象

	// 发布逻辑
	wx.showLoading({ title: "发布中..." });

	wx.request({
			url: 'http://localhost:8080/user/work/add', // 发布作品的接口
			method: 'POST',
			header: {
					'Content-Type': 'application/json',
					token: wx.getStorageSync('userInfo').data.token,
			},
			data: {
					description, // 作品描述
					images:imageUrls, // 图片 URL 列表
					videoUrls, // 视频 URL 列表
					device, // 使用设备
					location, // 拍摄地点
					tags: tagObjects // 传递 Tag 对象列表
			},
			success: (res) => {
					wx.hideLoading();
					if (res.data && res.data.code === 1) {
							Toast.success({
									message: "发布成功",
									context: this,
							});
							setTimeout(() => {
								wx.navigateBack();
							}, 1500);
					} else {
							Toast.fail({
									message: res.data.message || "发布失败",
									context: this,
							});
					}
			},
			fail: (err) => {
					wx.hideLoading();
					Toast.fail({
							message: "网络错误，请重试",
							context: this,
					});
					console.error("发布失败:", err);
			}
	});
}

});